package com.qf;

import com.qf.interfaces.FangDongService;
import com.qf.staticProxy.FangDongServiceImpl;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKBDynamicProxy {
    public static FangDongService getProxy(FangDongService fangDongService){
        //创建代理类
        /*
        参数一:类加载器
        参数二:共同的接口（接口数组）
        参数三:接口的实现类（增强内容）
         */
        FangDongService proxy= (FangDongService) Proxy.newProxyInstance(JDKBDynamicProxy.class.getClassLoader(), fangDongService.getClass().getInterfaces(), new InvocationHandler() {
            //当调用代理对象中的方法时会执行此方法
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //添加辅助功能
                System.out.println("发布租房信息");
                System.out.println("带租户看房");
                //调用真实对象的方法
                //通过反射执行真实方法
                //参数一：真实对象
                //参数二：方法的参数
                //返回值：真实对象的返回值,如果方法为void，自动返回null
                Object result = method.invoke(fangDongService, args);
                //添加辅助功能
                System.out.println("维护房屋");
                System.out.println("打扫卫生");
                return result;
            }
        });
        return proxy;
    }
    public static void main(String[] args) {
        //真实对象
        FangDongService fangdong = new FangDongServiceImpl();
        FangDongService proxy = getProxy(fangdong);
        proxy.zufang();

/*        Proxy.newProxyInstance(JDKBDynamicProxy.class.getClassLoader(), fangdong.getClass().getInterfaces(),(proxy,method,arg)-> {
            return null;
        });*/
    }
}
